home *** CD-ROM | disk | FTP | other *** search
/ Aminet 23 / Aminet 23 (1998)(GTI - Schatztruhe)[!][Feb 1998].iso / Aminet / dev / basic / hsb_wbs_inc.lha / hsb_wbs_inc / example / WBStarter.bas < prev    next >
BASIC Source File  |  1997-11-16  |  4KB  |  148 lines

  1. '    WBStarter.bas V1.0
  2. '    Start Workbench - Programs an Projects via wbstart.library
  3. '   by Steffen Leistner 1996, for HiSoft/Maxon BASIC Compiler
  4. '    TABWIDTH = 4
  5.  
  6. REM $NOLIBRARY
  7. REM $NOWINDOW
  8.  
  9. REM $INCLUDE exec.bh
  10. REM $INCLUDE dos.bh
  11. REM $INCLUDE asl.bh
  12. REM $INCLUDE icon.bh
  13. REM $INCLUDE wbstart.bh
  14. REM $INCLUDE workbench.bh
  15. REM $INCLUDE utility.bh            'for div. constants
  16.  
  17. CONST minver& = 37&                'Kickstart 2.0+
  18. CONST wbufsize& = 512&            'enough for filename - operations and taglists!
  19.  
  20. LIBRARY OPEN "exec.library", minver&
  21. LIBRARY OPEN "dos.library", minver&
  22. LIBRARY OPEN "asl.library", minver&
  23. LIBRARY OPEN "icon.library", minver&
  24. LIBRARY OPEN "wbstart.library", 2&
  25.  
  26. '----------------------------------------------------------------------------
  27.  
  28. FUNCTION WBObjectFilter&(BYVAL hk&, BYVAL rq&, BYVAL ap&)
  29.     SHARED wbuf&
  30.     STATIC fln$, tmp$, flh&, dob&, junk&            'static for more speed
  31.     WBObjectFilter& = FALSE&
  32.     
  33.     IF PEEKL(ap& + ap_Info% + fib_DirEntryType%) > NULL&
  34.         WBObjectFilter& = TRUE&
  35.         EXIT FUNCTION                                'a directory -> listed
  36.     END IF    
  37.     
  38.     fln$ = PEEK$(ap& + ap_Info% + fib_FileName%)
  39.     IF RIGHT$(fln$, 5) == ".info"
  40.         EXIT FUNCTION                                'a icon -> not listed
  41.     END IF
  42.     
  43.     tmp$ = PEEK$(PEEKL(rq& + fr_Drawer%)) + CHR$(0)
  44.     CopyMem SADD(tmp$), wbuf&, LEN(tmp$)
  45.     
  46.     IF AddPart&(wbuf&, ap& + ap_Info% + fib_FileName%, wbufsize&)
  47.         tmp$ = PEEK$(wbuf&) + CHR$(0)
  48.         flh& = xOpen&(wbuf&, MODE_OLDFILE&)
  49.         IF flh&
  50.             junk& = xRead&(flh&, wbuf&, 4&)
  51.             junk& = xClose&(flh&)
  52.             IF PEEKL(wbuf&) = &H000003F3&    
  53.                 WBObjectFilter& = TRUE&                'a executable file
  54.                 EXIT FUNCTION
  55.             END IF
  56.         ELSE
  57.             EXIT FUNCTION
  58.         END IF        
  59.         
  60.         dob& = GetDiskObject& (SADD(tmp$))            'check for icon
  61.         IF dob&
  62.             IF PEEK$(PEEKL(dob& + do_DefaultTool%)) > ""
  63.                 WBObjectFilter& = TRUE&                'a project with defaulttool
  64.             END IF
  65.             FreeDiskObject dob&
  66.         END IF
  67.     END IF
  68. END FUNCTION
  69.  
  70.  
  71. FUNCTION SelectProgram$
  72.     SHARED wbuf&, objfilterhook&
  73.     LOCAL req&, dir$
  74.     SelectProgram$ = ""
  75.     
  76.     req& = AllocAslRequest&(ASL_FileRequest&, NULL&)
  77.     IF req&
  78.         TAGLIST wbuf&, _
  79.             ASLFR_FilterFunc&,        objfilterhook&, _
  80.             ASLFR_TitleText&,        "Select a Program or Project:", _
  81.             ASLFR_PositiveText&,    "Run it!", _
  82.             ASLFR_InitialDrawer&,    CURDIR$, _
  83.         TAG_END&
  84.  
  85.         IF AslRequest&(req&, wbuf&)
  86.             dir$ = PEEK$(PEEKL(req& + fr_Drawer%)) + CHR$(0)
  87.             CopyMem SADD(dir$), wbuf&, LEN(dir$)
  88.             IF AddPart&(wbuf&, PEEKL(req& + fr_File%), wbufsize&)
  89.                 SelectProgram$ = PEEK$(wbuf&)
  90.             END IF
  91.         END IF
  92.         FreeAslRequest req&
  93.     END IF
  94. END FUNCTION
  95.  
  96.  
  97. FUNCTION WBRun&(pn$)
  98.     SHARED wbuf&
  99.     LOCAL oldlock&, junk&
  100.     WBRun& = RETURN_WARN&
  101.  
  102.     oldlock& = CurrentDir&(NULL&)        'the current dir
  103.     TAGLIST wbuf&, _
  104.         WBStart_Name&,            pn$, _
  105.         WBStart_DirectoryLock,    oldlock&, _
  106.     TAG_END&
  107.     
  108.     WBRun& = WBStartTagList&(wbuf&)        'result = dos-returncode
  109.     
  110.     junk& = CurrentDir&(oldlock&)        'restore current dir
  111. END FUNCTION
  112.  
  113.  
  114. FUNCTION Main&                            ';-)
  115.     SHARED wbuf&, objfilterhook&
  116.     LOCAL para$
  117.     Main& = RETURN_ERROR&
  118.     wbuf& = AllocVec& (wbufsize&, MEMF_PUBLIC& OR MEMF_CLEAR&)
  119.  
  120.     IF wbuf&
  121.         Main& = RETURN_FAIL&
  122.         para$ = COMMAND$
  123.         
  124.         IF (para$ = "") OR (FEXISTS(para$) = NULL&)
  125.             objfilterhook& = AllocVec&(Hook_sizeof%, MEMF_PUBLIC& OR MEMF_CLEAR&)
  126.             IF objfilterhook&
  127.                 INITHOOK objfilterhook&, VARPTRS(WBObjectFilter&)
  128.             
  129.                 para$ = SelectProgram$
  130.             
  131.                 FreeVec objfilterhook&
  132.             END IF
  133.         END IF
  134.         IF FEXISTS(para$)
  135.             Main& = WBRun&(para$)
  136.         ELSE
  137.             Main& = RETURN_WARN&
  138.         END IF
  139.         
  140.         FreeVec wbuf&
  141.     END IF
  142. END FUNCTION
  143.  
  144. '----------------------------------------------------------------------------
  145.  
  146. STOP Main&
  147.  
  148. DATA    "$VER: WBStarter in Basic V1.0 $"